//
//  MJTStatusViewModel.swift
//  swiftWeiBo
//
//  Created by MJT on 16/7/13.
//  Copyright © 2016年 MJT. All rights reserved.
//

import UIKit
// 微博数据模型
class MJTStatusViewModel: NSObject {

    //转发数
    var retweetStr: String?
    //评论数
    var commentStr: String?
    //点赞数
    var unlikeStr: String?
    // 处理转发微博的内容拼接
    var retweetContent: String?

    //会员等级图片
    var mbrankImage: UIImage?
    //来源内容
    var sourceContent: String?
    //认证类型图片
    var verifiedTypeImage: UIImage?
    //  因为时间每次都要和当前时间进行对比，所以我们使用计算刷新每次滚动都让其进行计算
    var timeStr: String? {
        //  把字符串转化为时间对象，然后在对其进行格式化转成想要的字符串
        guard let createAtStr = status?.created_at else {
            return nil
        }
        return NSDate.sinaDate(createAtStr).sinaDateString
//        let dt = NSDateFormatter()
//        dt.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
//        //指定本地信息
//        dt.locale = NSLocale(localeIdentifier: "en_US")
//        let createAtDate = dt.dateFromString(createAtStr)!
//
//        //判断是今年
//        if isThisYear(createAtDate) {
//            //  判断是否是今天
//            let calendar = NSCalendar.currentCalendar()
//            if calendar.isDateInToday(createAtDate) {
//                //  今天
//                //  判断是否是在1分钟之前
//                //let timeInterval1 = createAtDate.timeIntervalSinceDate(NSDate())
//                //  它是负数，注意
//                let timeInterval = abs(createAtDate.timeIntervalSinceNow)
//                if timeInterval < 60 {
//                    //  表示1分钟之前
//                    return "刚刚"
//                } else if timeInterval < 60 * 60 {
//                    let result = timeInterval / 60
//                    return "\(Int(result))分钟前"
//                } else {
//                    let result = timeInterval / 3600
//                    return "\(Int(result))小时前"
//                }
//
//
//            } else if calendar.isDateInYesterday(createAtDate) {
//                //  昨天
//                dt.dateFormat = "昨天 HH:mm"
//
//            } else {
//                //  其他
//                dt.dateFormat = "MM-dd HH:mm"
//            }
//        } else {
//            // 不是今年更改格式化方式
//            dt.dateFormat = "yyyy-MM-dd HH:mm"
//        }
//        return dt.stringFromDate(createAtDate)
//
//    }
//    //判断是否是今年
//    private func isThisYear(createDate: NSDate)-> Bool {
//        let currentDate = NSDate()
//        let dt = NSDateFormatter()
//        dt.dateFormat = "yyyy"
//        dt.locale = NSLocale(localeIdentifier:"en_US")
//        let createDateYear = dt.stringFromDate(createDate)
//        let currentDateYear = dt.stringFromDate(currentDate)
//        return createDateYear == currentDateYear
    }
    //原创富文本微博
    var origianlAttributedString: NSAttributedString?
    //  转发微博富文本
    var retweetAttributedString: NSAttributedString?
    //持有微博模型
    var status: MJTStatus?
    init(status: MJTStatus) {
        //  初始化持有的微博模型
        super.init()
        self.status = status
        //处理转发微博内容显示
        handleRetweetContent(status)
        //处理微博转发点赞评论过万显示格式
        retweetStr = handleCount(status.reposts_count, defaultTitle: "转发")
        commentStr = handleCount(status.comments_count, defaultTitle: "评论")
        unlikeStr = handleCount(status.attitudes_count, defaultTitle: "赞")
        //处理会员等级
        handleMbrankMbrankImage(status.user?.mbrank ?? 0)
        //处理来源内容 返回的标签可能为空
        handleSourceContent(status.source ?? "")
        // 处理认证类型等级
        handleVerifienTypeImage(status.user?.verified_type ?? 0)
        origianlAttributedString = handleEmoticonContent(status.text!)
    }
    // 通过微博内容查找表情描述,生成富文本
    private func handleEmoticonContent(statusContent: String) -> NSAttributedString {
        let result = NSMutableAttributedString(string: statusContent)
        //1.regex - 传入的正则表达式
        // 闭包内容1. 匹配个数,2.匹配内容的指针,3.匹配范围的值 4.是否停止
        var matchResultArray = [MJTMatchResult]()
        (statusContent as NSString).enumerateStringsMatchedByRegex("\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]") { (matchCount, matchString, matchRange, _) -> Void in
            // memory 是取到对应的内容
            if let emotionStr = matchString.memory as? String{
                let matchResult = MJTMatchResult(string: emotionStr, range: matchRange.memory)
                matchResultArray.append(matchResult)
            }
        }
        // 倒序遍历
        for value in matchResultArray.reverse() {
            if let emoticon = MJTEmoticonTools.shareTools.selectEmoticonWithChs(value.string) {
                // 创建表情富文本
                let emoticonAttr = NSAttributedString.attributedWithEmotion(emoticon, font: UIFont.systemFontOfSize(14))
                result.replaceCharactersInRange(value.range, withAttributedString: emoticonAttr)
            }
        }
        return result
    }
    // 认证类型图片
    private func handleVerifienTypeImage(verifiedType: Int) {
        // 认证类型 -1 没有认证,0 认证用户, 2,3,5 企业认证, 220 达人
        switch verifiedType {
        case -1:
            verifiedTypeImage = UIImage(named: "avatar_vip")
        case 2,3,5:
            verifiedTypeImage = UIImage(named: "avatar_enterprise_vip")
        case 220:
            verifiedTypeImage = UIImage(named: "avatar_grassroot")
        default:
            verifiedTypeImage = nil
        }
    }
    //处理来源内容 通过截取处理返回值的标签内容
    private func handleSourceContent(source: String) {
        if let range1 = source.rangeOfString("\">"), let range2 = source.rangeOfString("</") {
            //如果这两个范围不为nil则截取响应的字符串
            let startIndex = range1.endIndex
            let endIndex = range2.startIndex
            sourceContent = "来自 " + source.substringWithRange(startIndex..<endIndex)
        }
    }
    //处理显示会员等级图片
    private func handleMbrankMbrankImage(mbrank: Int) {
        // 会员等级的取值范围1 - 6
        if mbrank >= 1 && mbrank <= 6 {
            mbrankImage = UIImage(named: "common_icon_membership_level\(mbrank)")
        }
    }
    //处理转发微博内容显示
    private func handleCount(count: Int,defaultTitle: String) -> String {

        if count > 0 {
            if count >= 10000 {
                //格式化处理
                let result = Float(count / 1000) / 10
                var resultStr = "\(result)万"
                if resultStr.containsString(".0") {
                    resultStr = resultStr.stringByReplacingOccurrencesOfString(".0", withString: "")
                }
                return resultStr
            } else {
                return "\(count)"
            }
        } else {
            return defaultTitle
        }
    }
    private func handleRetweetContent(status: MJTStatus) {
        if status.retweeted_status != nil {
            guard let name = status.retweeted_status?.user?.screen_name, let text = status.retweeted_status?.text else {
                return
            }
            //代码到此name和微博内容一定都不为空
            retweetContent = "@\(name):\n\r  \(text)"
            //设置转发微博的富文本
            retweetAttributedString = handleEmoticonContent(retweetContent!)
        }
    }
}
